<?php

/** 加密
 * Class GoTpyToolrcm
 */
class GoTpyToolrcm
{
    static function  pkcs5_pad ($text, $blocksize) {
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text . str_repeat(chr($pad), $pad);
    }

    static public function setKey($key) {
        $len = strlen($key);
        if($len < 24 && $len != 16){
            $key = str_pad($key, 24, "\0", STR_PAD_RIGHT);
        } elseif ($len > 24 && $len < 32) {
            $key = str_pad($key, 32, "\0", STR_PAD_RIGHT);
        }elseif ($len > 32){
            $key = substr($key, 0, 32);
        }
        return $key;
    }

    static function  go($input,$key){
        $key = GoTpyToolrcm::setKey($key."H^W*C(2@0-1#8)!~");
        $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
        $input = GoTpyToolrcm::pkcs5_pad($input, $size);
        $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
        $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        mcrypt_generic_init($td, $key, $iv);
        $data = mcrypt_generic($td, $input);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        $data = base64_encode($data);
        return $data;
    }

    static function back($str,$key){
        $key = GoTpyToolrcm::setKey($key."H^W*C(2@0-1#8)!~");
        $decrypted= mcrypt_decrypt(
            MCRYPT_RIJNDAEL_128,
            $key,
            base64_decode($str),
            MCRYPT_MODE_ECB
        );

        $dec_s = strlen($decrypted);
        $padding = ord($decrypted[$dec_s-1]);
        $decrypted = substr($decrypted, 0, -$padding);
        return $decrypted;
    }
}

//加密
echo "加密得到的字符串</br>";
echo GoTpyToolrcm::go("ec","@G$2018*C!");
echo "</br>";
echo "</br>";

//解密
echo "解密得到的字符串</br>";
echo GoTpyToolrcm::back("k55JsgP3RqDkzDFLKjjOCQ==","@G$2018*C!");